logaritmic (base 2) binning in log-log (base 10) plots of integer histograms


In [67]:
import numpy

import matplotlib.pyplot

% matplotlib inline

In [114]:
DA BUTTARE


def  logBinnedStepPlot(histogramResults):
    if 0 in integerData:
        return "error: log2(0) = ?"

# y, binEdges = np.histogram(...)

# plt.bar(bin_edges[:-1], hist, width=1) and plt.xlim(min(bin_edges), max(bin_edges))

# plt.plot(x, y, ls='steps')

values, binEdges, others = histogramResults


---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-114-31485b7854cd> in <module>()
      9 # plt.plot(x, y, ls='steps')
     10 
---> 11 binEdges, values, others = histogramResults

NameError: name 'histogramResults' is not defined

In [120]:
DA BUTTARE

binEdges = range(1,20)
print binEdges # TODO vedere quando non si parte da 1

# int arrotonda all'intero inferiore
linMin = min(binEdges)
linMax = max(binEdges)

print linMin, linMax

logStart = int(numpy.log2(linMin))
logStop = int(numpy.log2(linMax))

print logStart, logStop

nLogBins = logStop - logStart + 1

print nLogBins

logBins = numpy.logspace(logStart, logStop, num=nLogBins, base=2, dtype=int)
print logBins

# 1,2,4,8,16,32,64,128,256,512,1024

linStart = 2**logStop + 1
linStop = linMax

print linStart, linStop

nLinBins = linStop - linStart + 1

print nLinBins

linBins = numpy.linspace(linStart, linStop, num=nLinBins, dtype=int)

print linBins

bins = numpy.append(logBins, linBins)

print bins

print len(bins)


[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
1 19
0 4
5
[ 1  2  4  8 16]
17 19
3
[17 18 19]
[ 1  2  4  8 16 17 18 19]
8

In [121]:
DA BUTTARE


# uso le proprietà dei logaritmi in base 2:
# 2^(n+1) - 2^n = 2^n
divisoriDatiCanalizzatiLog = numpy.delete(logBins, -1)

print divisoriDatiCanalizzatiLog

divisoriDatiCanalizzatiLin = numpy.ones(nLinBins, dtype=int)

print divisoriDatiCanalizzatiLin

print len(divisoriDatiCanalizzatiLin)

divisoriDatiCanalizzati = numpy.append(divisoriDatiCanalizzatiLog, divisoriDatiCanalizzatiLin)

print divisoriDatiCanalizzati

print len(divisoriDatiCanalizzati)


[1 2 4 8]
[1 1 1]
3
[1 2 4 8 1 1 1]
7

In [113]:
x = numpy.concatenate(([0], bins))
conteggi = values
y = numpy.concatenate(([0], conteggi, [0]))
matplotlib.pyplot.plot(x, y)

matplotlib.pyplot.xscale('log')
matplotlib.pyplot.yscale('log')
matplotlib.pyplot.step(x, y, where='post') #where = mid OR post
matplotlib.pyplot.xlim(0,100)
matplotlib.pyplot.ylim(0,10)


Out[113]:
(2.0, 10)

In [86]:
numpy.concatenate([0], conteggi, [0])


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-86-05438655e6bb> in <module>()
----> 1 numpy.concatenate([0], conteggi, [0])

TypeError: function takes at most 2 arguments (3 given)

In [ ]:


In [ ]: